[AWS Step Functions] Workflow Studioでワークフロー編集中に離脱しても復元できるようになりました
キミはWorkflow Studioでワークフロー編集中にセッションが切れる恐怖を感じたことはあるか
こんにちは、のんピ(@non____97)です。
皆さんはAWS Step FunctionsのWorkflow Studioでワークフロー編集中にセッションが切れる恐怖を感じたことはありますか? 私はあります。
Step Functionsのワークフローの編集はWorkflow Studioがとてつもなく便利です。
しかし、Workflow Studioでワークフロー編集中にリロードなどで離脱してしまうと編集中の内容が全て消えてしまうという性質がありました。
これは恐ろしいですね。
私もスイッチロールしてWorkflow Studioでワークフロー編集する場合は、セッションが途中で切れないかビクビクしながら作業していました。
そんなある日、いつものようにWorkflow Studioでワークフロー編集しているとセッションが切れてしまいました。
「やってしまった...」と天を仰ぎながら、ブラウザをリロードすると保存されていないワークフローが見つかりました。復元しますか?
と表示されるではありませんか。
以降、私の身に何が起こったのか紹介します。
いきなりまとめ
- Workflow Studioでワークフロー編集中に離脱しても復元できるようになりました
- 復元できるパターンは以下の2パターン
- Workflow Studioのタブをリロードする
- Workflow Studioのタブを、
Ctrl + Shift + T
でタブを復元する
- 別のタブやウィンドウでは復元できないので注意
結論
結論から言うと、Workflow Studioでワークフロー編集中に離脱しても復元できるようになりました。
Workflow Studioでワークフロー編集中にセッション切れで怯える心配がなくなりました。
これはありがたい。
実際に試してみましょう。
適当にWorkflow Studioでワークフローを作ってみます。
右上にワークフローが保存されいません
と表示されていますね。
この状態でブラウザをリロードします。
行った変更が保存されない可能性があります。
と脅されますが、問答無用で再読み込み
をクリックします。
リロードすると、保存されていないワークフローが見つかりました。復元しますか?
と表示されました。復元
をクリックします。
すると、リロード前のワークフローが表示されました。やったぜ。
復元できるパターンを確認してみた
どのような場合に復元できるのか確認します。
以下4パターンでも編集途中のワークフローを復元できるか確認しました。
パターン | 結果 |
---|---|
Workflow Studioのタブを閉じて、Ctrl + Shift + T でタブを復元する |
復元できる |
タブを閉じて、別のタブでWorkflow Studioを開く | 復元するか聞かれるが、復元 をクリックしても復元されない |
タブを閉じて、別のウィンドウでWorkflow Studioを開く | 復元するか聞かれるが、復元 をクリックしても復元されない |
Workflow Studioのタブを2回連続リロードする | 復元するか聞かれるが、復元 をクリックしても復元されない |
どうやら復元するのは同じタブで、直前のワークフローのようですね。
参考までにブラウザのSession Storageを確認すると、編集中のワークフローの定義が保存されていました。
具体的には、Google Chromeの開発者ツールからApplication
-Storage
-Session Storage
を開くと、`https://us-east-1.console.aws.amazon.com`があり、Keyが`states-unsaved_work`でValueが以下のようなアイテムが保存されていました。
{ "create:us-east-1:<AWSアカウントID>": { "mode": "polymath", "definitionString": "{\"Comment\":\"A description of my state machine\",\"StartAt\":\"Choice\",\"States\":{\"Choice\":{\"Type\":\"Choice\",\"Choices\":[{\"Next\":\"ListPolicies\"}],\"Default\":\"Map\"},\"ListPolicies\":{\"Type\":\"Task\",\"Next\":\"Parallel\",\"Parameters\":{},\"Resource\":\"arn:aws:states:::aws-sdk:iam:listPolicies\"},\"Parallel\":{\"Type\":\"Parallel\",\"Branches\":[{\"StartAt\":\"Pass\",\"States\":{\"Pass\":{\"Type\":\"Pass\",\"End\":true}}},{\"StartAt\":\"Wait\",\"States\":{\"Wait\":{\"Type\":\"Wait\",\"Seconds\":5,\"End\":true}}}],\"Next\":\"Success\"},\"Success\":{\"Type\":\"Succeed\"},\"Map\":{\"Type\":\"Map\",\"End\":true,\"Iterator\":{\"StartAt\":\"Map (1)\",\"States\":{\"Map (1)\":{\"Type\":\"Map\",\"End\":true,\"Iterator\":{\"StartAt\":\"Pass (1)\",\"States\":{\"Pass (1)\":{\"Type\":\"Pass\",\"Next\":\"ListKeys\"},\"ListKeys\":{\"Type\":\"Task\",\"End\":true,\"Parameters\":{},\"Resource\":\"arn:aws:states:::aws-sdk:kms:listKeys\"}}}}}}}}}" } }
色々動作確認をすると、このアイテムが更新されるのはWorkflow Studioでステートを追加したり、削除したりするなどワークフローを編集したタイミングであることが分かりました。
Session Storageのこのアイテムを使って復元するのかとも思ったのですが、リロードしたタイミングでは以下のようにStartAt
が空でした。
{ "create:us-east-1:<AWSアカウントID>": { "mode": "polymath", "definitionString": '{"Comment":"A description of my state machine","StartAt":"","States":{}}', }, }
Local StorageやCookieも確認してみましたが、関係ありそうなアイテムは見つかりませんでした。
また、Workflow StudioのJavasScriptもザッと読んでみたのですが、私のJavaScript力では該当の箇所を見つけることはできませんでした。
ただ、復元
もしくは破棄
をクリックした時に以下のリクエストが発生していました。
https://us-east-1.console.aws.amazon.com/p/log/1/states/1/OP/&k0=workLossPreventionRestored&m0=1&p0=visual_editor&cb=<何らかの数字 十数桁>&proxy-rid=<何らかの文字列>
workLossPreventionRestored
というのが非常に怪しいですね。どこかに編集中のワークフローの情報を適宜送信しており、復元するときはそこから取得してくるような感じなのでしょうか。
Workflow Studioでのワークフロー編集中がちょっと便利になりました
Workflow Studioでワークフロー編集中に離脱しても復元できるようになりました。
「Workflow Studio怖い..」となっていた方も、これを機に触ってみるのはいかがでしょうか。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!